package com.xjlsoft.weather.task;

import java.util.Date;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.xjlsoft.weather.config.ApplicationContextProvider;
import com.xjlsoft.weather.mapper.AerosolDataMapper;
import com.xjlsoft.weather.mapper.GroundDataMapper;
import com.xjlsoft.weather.mapper.RadiationDataMapper;
import com.xjlsoft.weather.service.AerosolAvgService;
import com.xjlsoft.weather.service.GroundAvgService;
import com.xjlsoft.weather.service.RadiationAvgService;
import com.xjlsoft.weather.service.WeatherTaskJob;

/**
 * 地面数据 平均数据 定时任务
 *
 * @author 码农猿
 */
public class AvgWeekTask implements WeatherTaskJob {

	/**
	 * 日志
	 */
	private static final Logger logger = LoggerFactory.getLogger(AvgWeekTask.class);

	private AerosolAvgService aerosolAvgService;

	private GroundAvgService groundAvgService;

	private RadiationAvgService radiationAvgService;

	/**
	 * 处理地面数据
	 */
	@Override
	public void run() {
		logger.info(">>>>>>>>>>>>开始 产生   大气平均 数据           AerosolAvgTask   当前线程名称 {}",
				Thread.currentThread().getName());


		aerosolAvgService = ApplicationContextProvider.getBean(AerosolAvgService.class);


		groundAvgService = ApplicationContextProvider.getBean(GroundAvgService.class);


		radiationAvgService = ApplicationContextProvider.getBean(RadiationAvgService.class);

		// 产生 周平均数据 地面数据 从 1952年 1月1号开始 统计周 数据
		logger.info(">>>>>>>>>>>>开始   产生大气周平均 数据  当前线程名称 {}", Thread.currentThread().getName());
		while (true) {
			Map<String, Object> map = aerosolAvgService.getNextWeekMessage();
			if (map != null) {
				boolean flag = (boolean) map.get("success");
				Date startDate = (Date) map.get("startDate");
				Date endDate = (Date) map.get("endDate");
				String week = (String) map.get("whatWeek");
				String message = (String) map.get("message");

				logger.info("================" + message);
				if (flag) {
					int result = aerosolAvgService.saveAvgWeek(startDate, endDate, week);

					logger.info("=====本次保存 地面 周平均 数据=" + result);
				} else {
					break;
				}

			} else {
				break;
			}
		}
		logger.info(">>>>>>>>>>>>结束   产生大气周平均 数据  当前线程名称 {}", Thread.currentThread().getName());

		// 产生 周平均数据 地面数据 从 1952年 1月1号开始 统计周 数据
		logger.info(">>>>>>>>>>>>开始  产生地面周平均 数据  当前线程名称 {}", Thread.currentThread().getName());
		while (true) {
			Map<String, Object> map = groundAvgService.getNextWeekMessage();
			if (map != null) {
				boolean flag = (boolean) map.get("success");
				Date startDate = (Date) map.get("startDate");
				Date endDate = (Date) map.get("endDate");
				String week = (String) map.get("whatWeek");
				String message = (String) map.get("message");

				logger.info("================" + message);
				if (flag) {
					int result = groundAvgService.saveAvgWeek(startDate, endDate, week);

					logger.info("=====本次保存 地面 周平均 数据=" + result);
				} else {
					break;
				}

			} else {
				break;
			}
		}
		logger.info(">>>>>>>>>>>>结束   产生地面周平均 数据  当前线程名称 {}", Thread.currentThread().getName());

		// 产生 周平均数据 地面数据 从 1952年 1月1号开始 统计周 数据
		logger.info(">>>>>>>>>>>>开始   产生辐射 周平均 数据  当前线程名称 {}", Thread.currentThread().getName());
		while (true) {
			Map<String, Object> map = radiationAvgService.getNextWeekMessage();
			if (map != null) {
				boolean flag = (boolean) map.get("success");
				Date startDate = (Date) map.get("startDate");
				Date endDate = (Date) map.get("endDate");
				String week = (String) map.get("whatWeek");
				String message = (String) map.get("message");

				logger.info("================" + message);
				if (flag) {
					int result = radiationAvgService.saveAvgWeek(startDate, endDate, week);

					logger.info("=====本次保存 辐射周平均 数据=" + result);
				} else {
					break;
				}

			} else {
				break;
			}
		}
		logger.info(">>>>>>>>>>>>结束   产生辐射周平均 数据  当前线程名称 {}", Thread.currentThread().getName());

	}
}